package main

import (
	// p "Ryncler/OperatingSystem-Experiment/src/process_management"
	// s "Ryncler/OperatingSystem-Experiment/src/single_process_scheduling"
	// b "Ryncler/OperatingSystem-Experiment/src/banker_algorithm"
	// m "Ryncler/OperatingSystem-Experiment/src/memory_allocation_recycling"
	page "Ryncler/OperatingSystem-Experiment/src/page_displace"
	"fmt"
)

func main() {
	fmt.Println("Hello OperatingSystem-Experiment")

	// // 创建进程
	// p.Create()
	// fmt.Println()
	// fmt.Println()

	// // 运行进程
	// p.RunProces(p.ProcessList[2].Pid)
	// p.RunProces(p.ProcessList[7].Pid)
	// p.RunProces(p.ProcessList[4].Pid)
	// p.RunProces(p.ProcessList[0].Pid)
	// p.RunProces(p.ProcessList[9].Pid)
	// fmt.Println()

	// // 杀死进程
	// p.KillProcess(p.ProcessList[2].Pid)
	// p.KillProcess(p.ProcessList[1].Pid)
	// fmt.Println()

	// // 挂起和唤醒进程
	// p.SwapOut(p.ProcessList[7].Pid)
	// p.SwapOut(p.ProcessList[1].Pid)
	// p.WakeUp(p.ProcessList[8].Pid)
	// p.WakeUp(p.ProcessList[7].Pid)

	// s.Create()
	// s.ProcessHead.FcfsScheduling()
	// s.ProcessHead.SjfScheduling()
	// s.ProcessHead.RrScheduling(3)

	// b.ProcessNum, b.ResourcesNum = 5, 4
	// b.InitData()
	// b.Create()
	// b.CalculationNeed()

	// request := make([]int, b.ResourcesNum)
	// request[0] = 0
	// request[1] = 4
	// request[2] = 2
	// request[3] = 0

	// if b.RequestAvailable(1, request) {
	// 	fmt.Println("系统当前是安全状态")
	// } else {
	// 	fmt.Println("系统当前是不安全状态")
	// }

	// m.Create(5)
	// fmt.Println("未交换前：")
	// m.ShowFreeArea()
	// m.Adjust()
	// fmt.Println("交换后：")
	// m.ShowFreeArea()

	// applyArea, startAddress := 50, 50
	// fmt.Printf("开始分配内存:\n开始地址：%v\t大小：%v\n", startAddress, applyArea)
	// if m.Alloc(applyArea) == -1 {
	// 	fmt.Println("内存不足")
	// } else {
	// 	fmt.Println("分配后：")
	// 	m.ShowFreeArea()

	// 	fmt.Printf("开始回收内存:\n开始地址：%v\t大小：%v\n", startAddress, applyArea)
	// 	for i := 1; i < 1000; i++ {
	// 		m.RecoveryFree(startAddress, applyArea)
	// 		m.Adjust()
	// 	}
	// 	fmt.Println("回收后：")
	// 	m.ShowFreeArea()
	// }

	pageNum, pageAccessNum, memoryNum := 5, 12, 3
	page.Create(pageNum, pageAccessNum, memoryNum)
	// page.FifoAlgorthm()
	page.LruAlgorthm()
	page.ShowPageDisplace(page.LRU)
}
